package com.example.demo.config;

import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;

public class MyInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
                             Object handler) throws Exception {
        //如果是映射到方法的直接拦截，即没有在corsconf配置文件中配置通过的接口，
        // 在这里会被拦截，否则放行
        if (handler instanceof HandlerMethod) {//是不是属于拦截的路径
            System.out.println(request.getRequestURL()+"这个方法被拦截");
            //设置请求内容的编码，防止乱码
            response.setContentType("application/json;charset=utf-8");
            response.setHeader("Access-Control-Allow-Origin", "*"); // 允许所有域名跨域访问
            response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE"); // 允许的请求方法
            response.setHeader("Access-Control-Allow-Headers", "Content-Type"); // 允许的请求头

            //从 http 请求头中取出 token
            String token = request.getHeader("token");
            if (token == null || token.equals("")) {//不存在token,则告诉前端需要登录
                PrintWriter out = response.getWriter();
                out.print("请先登录");
                return false;
            }else {//如果存在 ，则表示已经登陆
//实际开发中，通常token是加密的字符串，通过解密方法得到对应的值
// 解密后会含有用户信息和过期时间，要判断有没有这个用户，以及判断这个token有没有过期
//
                System.out.println(request.getRequestURL()+"这个方法已经登陆，通过本次拦截");
                return true;
            }
        }
        System.out.println(request.getRequestURL()+"这个方法没有被拦截");
//        通过拦截
        return true;

    }
    }

